1. 나의 말:

  2. ChatGPT의 말:

    C++Builder의 **이벤트(Event)**는 VCL 컴포넌트에서 특정 동작이 발생했을 때 자동으로 호출되는 함수입니다. 예를 들어 버튼을 클릭하면 OnClick 이벤트가 발생합니다.

    자주 사용하는 C++Builder 이벤트

    이벤트발생 시점주 용도
    OnClick버튼 등을 클릭버튼 동작 처리
    OnDblClick더블클릭더블클릭 처리
    OnCreateForm/객체 생성 시초기화
    OnShowForm이 화면에 표시될 때화면 표시 직전/직후 작업
    OnCloseForm을 닫을 때종료 처리, 닫기 여부 결정
    OnDestroyForm/객체가 소멸할 때메모리/객체 정리
    OnActivateForm이 활성화될 때활성화 시 처리
    OnDeactivateForm이 비활성화될 때비활성화 시 처리
    OnEnter컨트롤이 포커스를 얻을 때입력 시작 처리
    OnExit컨트롤이 포커스를 잃을 때입력 검증
    OnKeyDown키를 누를 때키 입력 처리
    OnKeyUp키를 뗄 때키 해제 처리
    OnKeyPress문자 키 입력문자 입력 처리
    OnMouseDown마우스 버튼을 누를 때마우스 입력
    OnMouseUp마우스 버튼을 뗄 때마우스 입력
    OnMouseMove마우스 이동마우스 위치 처리
    OnPaint화면을 그릴 때직접 그리기
    OnResize크기가 변경될 때크기 변경 대응
    OnChange값/내용이 변경될 때Edit, ComboBox 등의 값 변경
    OnTimerTimer 주기마다주기적 작업

    C++Builder의 VCL에는 이런 이벤트가 컴포넌트별로 제공되며, Object Inspector → Events 탭에서 연결할 수 있습니다.

    1. OnClick 예제

    TButton을 폼에 올리고 더블클릭하면 C++Builder가 이벤트 핸들러를 만들어 줍니다.

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        ShowMessage("버튼을 클릭했습니다.");
    }
    

    여기서

    TObject *Sender
    

    는 이 이벤트를 발생시킨 객체입니다.

    예를 들어 여러 버튼이 같은 이벤트를 사용할 수도 있습니다.

    void __fastcall TForm1::ButtonClick(TObject *Sender)
    {
        TButton *Btn = dynamic_cast<TButton*>(Sender);
    
        if (Btn)
            ShowMessage(Btn->Caption);
    }
    

    버튼마다 별도의 이벤트 함수를 만들지 않고 하나의 함수에서 처리할 수 있습니다.

    2. Form 이벤트

    폼에서는 다음 이벤트가 특히 중요합니다.

    OnCreate
       ↓
    OnShow
       ↓
    OnActivate
       ↓
    OnPaint
    

    폼이 생성되고 바로 표시되는 경우 이러한 순서로 이벤트가 발생할 수 있습니다.

    예:

    void __fastcall TForm1::FormShow(TObject *Sender)
    {
        Label1->Caption = "프로그램이 시작되었습니다.";
    }
    

    OnCreate 주의

    C++Builder에서는 OnCreate보다 폼 생성자를 직접 사용하는 것을 권장합니다. Embarcadero 문서에서도 C++ 코드에서는 OnCreate가 생성자와 상호작용할 수 있으므로 생성자를 override하는 방식을 권장합니다.

    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
        // 초기화 코드
    }
    

    3. OnChange

    예를 들어 TEdit의 글자가 변경될 때:

    void __fastcall TForm1::Edit1Change(TObject *Sender)
    {
        Label1->Caption = Edit1->Text;
    }
    

    사용자가 Edit1에 입력할 때마다 OnChange가 발생합니다.

    4. 키보드 이벤트

    void __fastcall TForm1::Edit1KeyDown(
        TObject *Sender,
        WORD &Key,
        TShiftState Shift)
    {
        if (Key == VK_RETURN)
        {
            ShowMessage("Enter 입력");
        }
    }
    

    OnKeyDown, OnKeyUp, OnKeyPress는 각각 전달되는 인자와 용도가 조금씩 다릅니다.

    5. 이벤트의 기본 구조

    C++Builder VCL 이벤트는 대체로 이런 형태입니다.

    void __fastcall TForm1::이벤트이름(
        TObject *Sender)
    {
        // 이벤트가 발생했을 때 실행할 코드
    }
    

    하지만 이벤트 종류에 따라 매개변수가 달라집니다.

    예를 들어:

    // OnClick
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    }
    
    // OnMouseMove
    void __fastcall TForm1::FormMouseMove(
        TObject *Sender,
        TShiftState Shift,
        int X,
        int Y)
    {
    }
    
    // OnKeyDown
    void __fastcall TForm1::Edit1KeyDown(
        TObject *Sender,
        WORD &Key,
        TShiftState Shift)
    {
    }
    

    즉, 이벤트마다 정해진 함수 형식(signature)을 맞춰야 합니다.

    원하시면 다음 단계로 `C++Builder VCL 이벤트 전체를 "이벤트 → 발생 조건 → 함수 형식 → 예제" 형태로 정리한 표도 만들어드릴 수 있습니다.

ChatGPT는 AI라 실수할 수 있습니다.

현재 채팅을 지울까요?

새 채팅을 시작하면 현재 대화가 삭제됩니다. 채팅을 저장하려면 하거나 하세요.

로그인 또는 회원가입

더 스마트한 응답, 파일 및 이미지 업로드 등을 이용할 수 있습니다.

대화형 콘텐츠